package com.example.entity;

/**
 * 深克隆（Deep Clone） 是指不仅复制当前对象，还递归地复制它内部所有的引用对象，使得克隆出的新对象与原对象完全独立，互不影响。
 */
public class Animal implements Cloneable {
    public String name;
    public int age;
    public Master master;

    public Animal(String name, int age, Master master) {
        this.name = name;
        this.age = age;
        this.master = master;
    }

    @Override
    public Object clone() throws CloneNotSupportedException {
        // 浅克隆 Animal
        /**
         * 直接调用 Object 类中的 clone() 方法就是浅克隆（Shallow Clone），这是 Java 中 clone() 方法的默认行为。
         */
        Animal cloned = (Animal) super.clone();
        // 深克隆 Master
        cloned.master = (Master) master.clone();
        return cloned;
    }
}
/**
 * 深克隆的真正目的：
 * 项目	            说明
 * 目标	            克隆出一个完全独立的新对象，它和原对象互不影响
 * 核心操作	        递归复制所有引用类型字段（引用字段中的引用也要复制）
 * 基本类型字段	    值复制，本来就独立 ✅
 * 不可变对象字段	    共享引用也可以 ✅（因为内容不会改变）
 * 可变引用类型字段	必须复制出新对象 ❗（否则就是浅克隆）
 * 举例	            克隆一个 Person，其 address, hobbyList, profilePhoto 等字段都要深复制
 * 将所有引用类型的字段也“递归地”克隆一份副本，使得原对象和克隆对象在所有层级上都完全独立、不共享。
 * 深克隆的目的并不是将引用变量消除，而是递归地复制引用变量指向的对象，确保克隆后的每一个层级都是独立的，不与原对象共享引用。
 */
/**
 * 项目	        深克隆说明
 * 基本类型	    复制值
 * 引用类型	    递归复制引用对象，完全独立
 * 内存独立性	    完全独立（所有字段均独立）
 * 性能	        慢一些（尤其是序列化方式）
 * 使用场景	    多层嵌套对象、副本完全隔离的需求
 */
